package datamodule;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import util.FString;
import conexao.Connect;

public class PatrimonioDAO {

	private DBuserVO userVO;

	public PatrimonioDAO( DBuserVO userVO){
		this.userVO = userVO;
	}

	//Inserir Patrimonio
	public int inserir(PatrimonioVO VOpat) throws ClassNotFoundException, SQLException {
		Connection con = Connect.getConnection(userVO);
		PreparedStatement pstmtInsert = con.prepareStatement(
				"INSERT INTO patrimonio(pat_Cod_Patri, pat_Descricao, igr_Cod_Igreja, " +
				" pat_QTDE, pat_VR_Unitario, pat_Date_Ini, pat_Observacao) "+ 
				" VALUES(?,?,?,?,?,?,?) ");
		pstmtInsert.setString(1, VOpat.getPat_Cod_Patri());			
		pstmtInsert.setString(2, VOpat.getPat_Descricao());
		pstmtInsert.setString(3, VOpat.getIgr_Cod_Igreja());
		pstmtInsert.setLong  (4, VOpat.getPat_QTDE());
		pstmtInsert.setDouble(5, VOpat.getPat_Vr_Unitario());
		pstmtInsert.setDate  (6, VOpat.getPat_Date_Ini());
		pstmtInsert.setString(7, VOpat.getPat_Observacao());
		int reg = pstmtInsert.executeUpdate();	
		con.close();
		return reg;
	}

	//Alterar Patrimonio
	public int alterar(PatrimonioVO VOpat) throws ClassNotFoundException, SQLException {
		Connection con = Connect.getConnection(userVO);
		String virgula = "";
		StringBuffer sql = new StringBuffer(" UPDATE patrimonio SET ");
		if (!VOpat.getPat_Cod_Patri().equals(FString.ignorar)) {
			sql.append(virgula+" pat_Cod_Patri = '"+VOpat.getPat_Cod_Patri()+"' ");
			virgula = ",";
		}
		if (!VOpat.getPat_Descricao().equals(FString.ignorar)) {
			sql.append(virgula+" pat_Descricao = '"+VOpat.getPat_Descricao()+"' ");
			virgula = ",";
		}
		if (!VOpat.getIgr_Cod_Igreja().equals(FString.ignorar)) {
			sql.append(virgula+" igr_Cod_Igreja = '"+VOpat.getIgr_Cod_Igreja()+"' ");
			virgula = ",";
		}
		if (!VOpat.getPat_QTDE().equals(FString.ignorar)) {
			sql.append(virgula+" pat_QTDE = '"+VOpat.getPat_QTDE()+"' ");
			virgula = ",";
		}
		if (!VOpat.getPat_Vr_Unitario().equals(FString.ignorar)) {
			sql.append(virgula+" pat_Vr_Unitario = '"+VOpat.getPat_Vr_Unitario()+"' ");
			virgula = ",";
		}
		if (!VOpat.getPat_Date_Ini().equals(FString.ignorar)) {
			sql.append(virgula+" pat_Date_Ini = '"+VOpat.getPat_Date_Ini()+"' ");
			virgula = ",";
		}
		if (!VOpat.getPat_Observacao().equals(FString.ignorar)) {
			sql.append(virgula+" pat_Observacao = '"+VOpat.getPat_Observacao()+"' ");
			virgula = ",";
		}	
		sql.append(" WHERE pat_Cod_Patri = '"+VOpat.getPat_Cod_Patri()+"' ");
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0, sql.length()));
		int registrosAfetados = pstmt.executeUpdate();
		con.close();
		return registrosAfetados;
	}	
	
	// Deletar Patrimonio
	public int deletar(PatrimonioVO VOpat) throws ClassNotFoundException, SQLException {		
		Connection con = Connect.getConnection(userVO);
		PreparedStatement pstmt = con.prepareStatement(
		"DELETE FROM patrimonio WHERE pat_Cod_Patri = ?");
		pstmt.setString(1, VOpat.getPat_Cod_Patri());
		int registrosAfetados = pstmt.executeUpdate();
		con.close();
		return registrosAfetados;
	}

	//Pesquisar Patrimonio
	public PatrimonioVO pesquisar(PatrimonioVO VOpat) throws ClassNotFoundException, SQLException {				
		Connection con = Connect.getConnection(userVO);
		StringBuffer sql = new StringBuffer("SELECT * FROM patrimonio Where pat_Cod_Patri <> '' ");
		
		if (!VOpat.getPat_Cod_Patri().equals(FString.ignorar)) {
			sql.append(" AND UPPER(pat_Cod_Patri) = '"+VOpat.getPat_Cod_Patri()+"' ");			
		}		
		if (!VOpat.getPat_Descricao().equals(FString.ignorar)) {
			sql.append(" AND UPPER(pat_Descricao) = '"+VOpat.getPat_Descricao()+"' ");			
		}
		//System.out.println(sql);
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0,sql.length()));		
		ResultSet rs = pstmt.executeQuery();
		if (rs.next()) {
			VOpat = new PatrimonioVO();
			VOpat.setPat_Cod_Patri  ( rs.getString("pat_Cod_Patri"));
			VOpat.setPat_Descricao  ( rs.getString("pat_Descricao"));
			VOpat.setIgr_Cod_Igreja ( rs.getString("igr_Cod_Igreja"));
			VOpat.setPat_QTDE       ( rs.getString("pat_QTDE"));       
			VOpat.setPat_Vr_Unitario( rs.getDouble("pat_VR_Unitario"));
			VOpat.setPat_Date_Ini   ( rs.getDate  ("pat_Date_Ini"));   
			VOpat.setPat_Observacao ( rs.getString("pat_Observacao"));
		}else {
			VOpat = null;
		}
		pstmt.close();
		rs.close();
		con.close();
		return VOpat;
	}

	public ArrayList<PatrimonioVO> geral(PatrimonioVO VOpat) throws SQLException, ClassNotFoundException {		
		ArrayList<PatrimonioVO> lista = null;
		Connection con = Connect.getConnection(userVO);
		StringBuffer sql = new StringBuffer("SELECT * FROM patrimonio Where pat_Cod_Patri <> '' ");
		if (!VOpat.getPat_Cod_Patri().equals(FString.ignorar)) {
			sql.append(" AND UPPER(pat_Cod_Patri) LIKE UPPER('"+VOpat.getPat_Cod_Patri()+"%"+"')");
		}
		if (!VOpat.getPat_Descricao().equals(FString.ignorar)) {
			sql.append(" AND UPPER(pat_Descricao) LIKE UPPER('"+VOpat.getPat_Descricao()+"%"+"')");
		}
		if (!VOpat.getIgr_Cod_Igreja().equals(FString.ignorar) && !VOpat.getIgr_Cod_Igreja().isEmpty()) {
			sql.append(" AND UPPER(igr_Cod_Igreja) LIKE UPPER('"+VOpat.getIgr_Cod_Igreja()+"%"+"')");
		}	
		if (!VOpat.getOrdem().equals(FString.ignorar)) {
			sql.append(" ORDER BY "+VOpat.getOrdem());
		}
		if (!VOpat.getLimit().equals(FString.ignorar)) {
			sql.append(" LIMIT "+VOpat.getLimit());
		}
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0,sql.length()));		
		ResultSet rs = pstmt.executeQuery();
		if (rs.next()) {
			lista = new ArrayList<PatrimonioVO>();
			do {
				PatrimonioVO pat = new PatrimonioVO();
				pat.setPat_Cod_Patri  ( rs.getString("pat_Cod_Patri"));
				pat.setPat_Descricao  ( rs.getString("pat_Descricao"));
				pat.setIgr_Cod_Igreja ( rs.getString("igr_Cod_Igreja"));
				pat.setPat_QTDE       ( rs.getString("pat_QTDE"));
				pat.setPat_Vr_Unitario( rs.getDouble("pat_VR_Unitario"));
				pat.setPat_Date_Ini   ( rs.getDate  ("pat_Date_Ini"));
				pat.setPat_Observacao ( rs.getString("pat_Observacao"));
				
				lista.add(pat);
			}
			while (rs.next());			
		}
		pstmt.close();
		rs.close();
		con.close();
		return lista;
	}	
	public ResultSet listagem(PatrimonioVO VOpat, Connection con) throws SQLException, ClassNotFoundException {		
		StringBuffer sql = new StringBuffer("SELECT "+
	    " patrimonio.`pat_Cod_Patri` AS patrimonio_pat_Cod_Patri, "+
        " patrimonio.`pat_Descricao` AS patrimonio_pat_Descricao, "+
	    " patrimonio.`igr_Cod_Igreja` AS patrimonio_igr_Cod_Igreja, "+
	    " patrimonio.`pat_QTDE` AS patrimonio_pat_QTDE, "+
	    " patrimonio.`pat_Vr_Unitario` AS patrimonio_pat_Vr_Unitario, "+
	    " patrimonio.`pat_Date_Ini` AS patrimonio_pat_Date_Ini, "+
	    " patrimonio.`pat_Observacao` AS patrimonio_pat_Observacao, "+
	    " igrejas.`igr_Cod_Igreja` AS igrejas_igr_Cod_Igreja, "+
	    " igrejas.`igr_Descricao` AS igrejas_igr_Descricao "+
		" FROM    `igrejas` igrejas INNER JOIN `patrimonio` patrimonio ON igrejas.`igr_Cod_Igreja` = patrimonio.`igr_Cod_Igreja` "+				
		" WHERE    patrimonio.`pat_Cod_Patri` <> '' ");		
				
		if (!VOpat.getPat_Cod_Patri().equals(FString.ignorar) && !VOpat.getPat_Cod_Patri().isEmpty()) {
			sql.append(" AND UPPER(patrimonio.`pat_Cod_Patri`) = '"+VOpat.getPat_Cod_Patri()+"'");			
		}		
		if (!VOpat.getPat_Descricao().equals(FString.ignorar) && !VOpat.getPat_Descricao().isEmpty()) {
			sql.append(" AND UPPER(patrimonio.`pat_Descricao`) like '"+VOpat.getPat_Descricao()+"%"+"'");			
		}

		if (!VOpat.getIgr_Cod_Igreja().equals(FString.ignorar) && !VOpat.getIgr_Cod_Igreja().isEmpty()) {
			sql.append(" AND UPPER(patrimonio.`igr_Cod_Igreja`) = '"+VOpat.getIgr_Cod_Igreja()+"'");
		}
		
		if (!VOpat.getOrdem().equals(FString.ignorar) && !VOpat.getOrdem().isEmpty()) {
			sql.append(" ORDER BY "+VOpat.getOrdem());
		}
		if (!VOpat.getLimit().equals(FString.ignorar)) {
			sql.append(" LIMIT "+VOpat.getLimit());
		}
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0,sql.length()));
		System.out.println(pstmt);
		ResultSet rs = pstmt.executeQuery();
		return rs;
	}	
		
}